#include<bits/stdc++.h>
using namespace std;
#define int long long
#define dou double
const int maxn = 2e5 + 5;
const int maxm = 3005;
struct node{
    int u, v, w, id;
    node(){}
    node(int u,int v, int w, int id):u(u), v(v), w(w), id(id){}
    // jisuan瞬时速度
    int sp(int s){ 
        return sqrt(1.0 * v * v + 2.0 * w * s) + 0.999999999999;
    }
};
vector<node> a;
int ce[maxn], dp[maxm][maxm], t[maxn];
signed main(){
    // cin.clear();
    freopen("detect.in", "r", stdin);
    freopen("detect.out", "w", stdout);
    int T;cin >> T;
    while(T --){
        int n, m, l, v;cin >> n >> m >> l >> v;
        // int temp;cin >> temp;
        // cout << temp;
        int sum = 0;
        a.clear();
        for(int i = 1;i <= n;i ++)t[i] = 0;
        for(int i = 1;i <= n;i ++){
            int u, v, w;cin >> u >> v >> w;
            // cout << u << v  <<' ' << w << endl;
            sum += w;
            a.push_back(node(u, v, w, i));
        }
        for(int i = 1;i <= m;i ++){
            //gua lian biao
            cin >> ce[i];
            // cout << ce[i] << ' ';
        }
        // cout << endl;
        int ans = 0;
        for(int i = 1;i <= m;i ++){ // mei ge ce shi dian
            for(int j = 1;j <= n;j ++){// suo you de che
                if(a[j].u > ce[i])continue;
                // cout << ce[i]  <<' ' << a[j].u << ' ' << a[j].sp(ce[i] - a[j].u) << endl;
                if(a[j].sp(ce[i] - a[j].u) > v){ // chaosu
                    dp[i][++ dp[i][0]] = a[j].id;
                    if(!t[a[j].id]){
                        ans ++;
                        t[a[j].id] = 1;
                    }
                }
            }
        }
        cout << ans <<' ';
        ans = 0;
        if(sum == 0){
            cout << m- 1<< endl;
            return 0;
        }
        for(int i = 1;i <= n;i ++)t[i] = 0;
        // for(int i = 1;i <= n;i ++){
        //     for(int j = 1;j <= dp[i][0];j ++){
        //         cout << dp[i][j] << ' ' ;
        //     }
        //     cout << endl;
        // }
        // cout << endl;
        for(int i = 1;i <= n;i ++){// mei ju mei liang che
            if(t[i])continue;
            int Max = 0, maxk = -0x7f;
            for(int j = 1;j <= m;j ++){
                for(int k = 1;k < dp[j][0];k ++){// mei ju lian biao 
                    if(dp[j][k] == i){
                        if(dp[j][0] > Max){
                            Max = dp[i][0];
                            maxk = j;
                        }
                        break;
                    }
                }
            }
            if(maxk != -0x7f){
                ans ++;
                for(int k = 1;k < dp[maxk][0];k ++){
                    t[dp[maxk][k]] = 1;
                }
            }
        }
        cout << n - ans << endl;
    }
}